#ifndef DISPATCHED_H
#define DISPATCHED_H

#include <iostream>
#include "Shapes.h"

namespace Hatch
{
	void print(Shape& lhs,Shape& rhs){std::cout << lhs.getType() << " : " << rhs.getType() << std::endl;}
	void RectangleRectangle(Shape& lhs,Shape& rhs){ print(lhs,rhs);}
	void RectangleRectangle(Rectangle& lhs,Rectangle& rhs){ print(lhs,rhs); }
	void EllipsePoly(Ellipse& lhs,Poly& rhs){ print(lhs,rhs); }
	//void Fire(Rectangle& lhs,Ellipse& rhs){ print(lhs,rhs);}
	//void Fire(Rectangle& lhs,Poly& rhs){ print(lhs,rhs);}
	//void Fire(Ellipse& lhs,Rectangle& rhs){ print(lhs,rhs);}
	//void Fire(Ellipse& lhs,Ellipse& rhs){ print(lhs,rhs);}
	//void Fire(Ellipse& lhs,Poly& rhs){ print(lhs,rhs);}
	//void Fire(Poly& lhs,Rectangle& rhs){ print(lhs,rhs);}
	//void Fire(Poly& lhs,Ellipse& rhs){ print(lhs,rhs);}
	//void Fire(Poly& lhs,Poly& rhs){ print(lhs,rhs); }
	//void Fire(Shape& lhs,Shape& rhs){ OnError(lhs,rhs); }

	void OnError(Shape&,Shape&){ throw std::runtime_error("Unmatched Shape-Shape");}
	
};

#endif